package com.hsmw.common.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author WD
 * @version 1.0
 * @description: 只生成entity的类，不生成controller、service、mapper对应的类
 * @date 2020/12/15 16:53
 */
public class CodeGenerator {

	/**hsmw_vehicle_collect
	 * 读取控制台内容
	 */
	public static String scanner(String tip) {
		Scanner scanner = new Scanner(System.in);
		StringBuilder help = new StringBuilder();
		help.append("请输入" + tip + "：");
		System.out.println(help.toString());
		if (scanner.hasNext()) {
			String ipt = scanner.next();
			if (StringUtils.isNotEmpty(ipt)) {
				return ipt;
			}
		}
		throw new MybatisPlusException("请输入正确的" + tip + "！");
	}

	public static void main(String[] args) {
		/**
		 * 代码生成器
		 */
		AutoGenerator mpg = new AutoGenerator();

		/**
		 * 全局配置
		 */
		GlobalConfig globalConfig = new GlobalConfig();
		//生成文件的输出目录
		String projectPath = System.getProperty("user.dir");
		globalConfig.setOutputDir(projectPath + "/hsmw-common" + "/src/main/java/");
		//Author设置作者
		globalConfig.setAuthor("wd");
		//是否覆盖文件
		globalConfig.setFileOverride(true);
		globalConfig.setSwagger2(true);
		//生成后打开文件
		globalConfig.setOpen(false);
		globalConfig.setDateType(DateType.TIME_PACK);

		globalConfig.setServiceImplName("%sService");

		//resultMap
		globalConfig.setBaseResultMap(true);
		globalConfig.setBaseColumnList(true);
		mpg.setGlobalConfig(globalConfig);

		/**
		 * 数据源配置
		 */
		DataSourceConfig dataSourceConfig = new DataSourceConfig();
		// 数据库类型,默认MYSQL
		dataSourceConfig.setDbType(DbType.MYSQL);
		//自定义数据类型转换
		dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
		dataSourceConfig.setUrl("jdbc:mysql://62.234.7.232:3306/htn-1.3?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false");
		dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
		dataSourceConfig.setUsername("root");
		dataSourceConfig.setPassword("shaop");
		mpg.setDataSource(dataSourceConfig);
		/**
		 * 包配置
		 */
		PackageConfig pc = new PackageConfig();
		//父包名。如果为空，将下面子包名必须写全部， 否则就只需写子包名
		pc.setParent("com.hsmw.common");
		pc.setController("controller");
		pc.setService("service");
		pc.setMapper("mapper");
		pc.setEntity("entity");
		mpg.setPackageInfo(pc);
		/**
		 * 配置模板
		 */
		TemplateConfig templateConfig = new TemplateConfig();
		// 配置自定义输出模板
		//指定自定义模板路径，注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
		// templateConfig.setEntity("templates/entity2.java");

		templateConfig.setService("");
//		templateConfig.setController("");
		templateConfig.setServiceImpl("");
//		templateConfig.setMapper("");
//		templateConfig.setXml(null);
		mpg.setTemplate(templateConfig);
		/**
		 * 策略配置
		 */
		StrategyConfig strategy = new StrategyConfig();
		//设置命名格式
		strategy.setNaming(NamingStrategy.underline_to_camel);
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);
		strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
		//实体是否为lombok模型（默认 false）
		strategy.setEntityLombokModel(true);
		//restful api风格
		strategy.setRestControllerStyle(true);
		strategy.setVersionFieldName("version");
		//设置自定义继承的Entity类全称，带包名
		strategy.setSuperEntityClass("com.hsmw.common.base.BaseModel");
		//设置自定义继承的Service类全称，带包名
		strategy.setSuperServiceClass("com.hsmw.common.base.BaseService");
		//设置自定义继承的Controller类全称，带包名
		strategy.setSuperControllerClass("com.hsmw.common.base.BaseController");
		//驼峰转连字符
		strategy.setControllerMappingHyphenStyle(true);
		//表名前缀
		mpg.setStrategy(strategy);
		mpg.execute();
	}

}
